Cloud9上にTerraformの実行環境を作ってみた
こんにちは、soraです。
今回は、Cloud9上にTerraformの実行環境を作ってみたことについて書いていきます。
Cloud9上にCDK+Goの実行環境を作ってみたことは、先日記事しました。
Cloud9上にCDK+Goの実行環境を作ってみた
AWS Cloud9とは
AWS Cloud9は、AWS上に統合開発環境を簡単に作ることができ、ブラウザ上でコードの記述や実行ができるサービスです。
実態としては、EC2サーバを起動してその上に統合開発環境を作ってくれます。
特にローカル環境を汚したくない方やWindowsPCを使っていてローカルで開発環境を作るのを手間に感じる方は、利用すると便利なサービスだと思います。
Terraformとは
Terraformは、HashiCorp社によって開発されたIaCを実現するツールです。
CDKとは異なり、独自言語であるHCL (HashiCorp Configuration Language)を使う必要があります。
また、AWSだけでなくGDPやAzureなど他のクラウドに対しても使用可能です。
個人的には、公式のマニュアルも読みやすいことも好きなポイントの1つです。
公式のマニュアル(Docs overview | hashicorp/aws | Terraform Registry)
やってみた
それでは、実際にCloud9上にTerraformの環境を作っていきます。
Cloud9の構築
Cloud9のページから[Create environment]を押して、セットアップ画面で入力・設定変更をします。
名前を入れて、他はEC2インスタンスタイプを含めてデフォルトです。
[Create]を押して、少し待つとセットアップが完了します。
セットアップが完了したら、Cloud9 IDEの列の[OPEN]から環境に入れます。
Terraformの環境準備
Cloud9の場合、aws-cliやgitがデフォルトでインストールされています。
gitはパッケージをインストールするときに使用します。
$ aws --version aws-cli/1.19.112 Python/2.7.18 Linux/4.14.301-224.520.amzn2.x86_64 botocore/1.20.112 $ git -v git version 2.38.1
Terraformのバージョン管理に便利なtfenvをインストールします。
その後に、Terraformをインストールします。
#tfenvのインストール $ git clone https://github.com/tfutils/tfenv.git ~/.tfenv #パスを通す $ sudo ln -s ~/.tfenv/bin/* /usr/local/bin #tfenvのバージョン確認 $ tfenv -v tfenv 3.0.0-18-g1ccfddb #Terraformのインストール可能なバージョンの確認 $ tfenv list-remote 1.4.0-alpha20221207 1.4.0-alpha20221109 1.3.7 1.3.6 …… 0.1.1 0.1.0 #Terraformのインストール $ tfenv install 1.3.7 #Terraformのインストール済みのバージョンの確認 $ tfenv list #利用するTerraformのバージョンを指定 $ tfenv use 1.3.7 #利用中のTerraformのバージョン確認 $ terraform -v Terraform v1.3.7 on linux_amd64
テスト
せっかくなので実際にCloud9上でTerraformを使ってみます。
今回はEC2を作成してみます。
まずテスト用にフォルダを作成します。
#新しいフォルダを作成して移動します。 $ mkdir test-terraform && cd test-terraform
main.tfを作成して、処理を記載します。
今回は簡易なため1ファイルにまとめていますが、本来であればmainと各リソース作成のコードは分けた方が良いです。
Terraformで実行・管理している状態を保存する.tfstateファイルは、保存先としてローカル(ここではCloud9)ではなくS3を指定しています。(backend s3の箇所)
main.tf
terraform { #AWSプロバイダーのバージョン指定 required_providers { aws = { source = "hashicorp/aws" version = "~> 4.51.0" } } #tfstateファイルをS3に配置する(配置先のS3は事前に作成済み) backend s3 { bucket = "sora-testbucket-terraform" region = "ap-northeast-1" key = "tf-test.tfstate" } } #AWSプロバイダーの定義 provider aws { region = "ap-northeast-1" } #EC2の作成 resource aws_instance ec2 { ami = "ami-0bba69335379e17f8" instance_type = "t2.micro" tags = { Name = "tf-test" } }
ソースコードが完成したので、実行していきます。
#ワークスペースの初期化や必要なプラグインのダウンロード $ terraform init #実行したときのリソースの差分を確認(実行結果は一部省略、行は詰めています) $ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_instance.ec2 will be created + resource "aws_instance" "ec2" { + ami = "ami-0bba69335379e17f8" + instance_type = "t2.micro" + tags = { + "Name" = "tf-test" } Plan: 1 to add, 0 to change, 0 to destroy. #実行 $ terraform apply
コマンド実行後に、EC2が生成されていることが確認できます。(画像2行目)
CDKとは異なり、CloudFormationスタックを生成されません。
また注意点として、Terraformで構築したリソースを変更したい場合は、直接変更せずソースコードを修正して変更するようにしましょう。
tfstateで保持している状態と現状のリソースの整合性が取れなくなり、管理する上で良くないです。
クリーンアップ
最後に、Terraformで作成したEC2を削除します。
$ terraform destroy
最後に
今回は、Cloud9上にTerraformの実行環境を作って実行するまでの流れを紹介しました。
TerraformやCDKなどのIaCを実現するツールは、AWSで構築を行う際に基本的に使われるため、興味がある方はぜひ使ってみてはいかがでしょうか。